// 封装了http请求


// 1. 每次写的都需要写好多配置比较麻烦
// 2. 如果接口之间有依赖关系，嵌套的层级比较多
// 3. 每次写的时候需要加上域名，如果切换环境，所有接口都需要进行修改

// 1. 封装的时候就可以在封装的函数体里设置好默认配置
// 2. 通过Promise
// 3. 自己配置一些映射关系


// 函数的作用是什么
//    根据指定url，指定的配置，进行http请求发送，得到结果
// 函数输入和输出是什么
// 输入
//    url
//    method
//    data
//    header
// 输出
//    一个Promise对象
//        状态为 成功的时候=》 得到请求的结果
//        状态为 失败的时候=》 报错的信息


// 我们请求可以会有多个环境，不同环境会有不同的域名
const proxy = {
  "/api":{
    // 代理地址
    target:"https://showme.myhope365.com",
    // 是否重写前缀
    pathRewrite:false
  },
  // 代理到另一个域名
  "/music-api":{
    target:"https://showme.myhope365.com",
    pathRewrite:true
  }
}


export function request(options) {
  return new Promise((reslove,reject)=>{
    // 立刻执行这里代码

    // 在这个位置，加一个cookie。 提现了我们封装的好处
    // 这个位置，类似于我们axios里的请求拦截器， 请求之前可以进行一些操作


    // 默认情况下设置请求体类型为content-type":"application/x-www-form-urlencoded"
    const header = {
      "content-type":"application/x-www-form-urlencoded",
      "cookie": wx.getStorageSync("cookie"),
      // 别的请求头， 万一个别接口是json格式的
      ...options.header
    }
    // 判断url以配置指定代理开头的，这个时候按照指定域名访问
    // startsWith 前缀匹配， endWith 后缀匹配
    // if(options.url.startsWith("/api")){
    //   options.url = "https://showme.myhope365.com"+options.url;
    // }


    // 判断 url是符合哪一个代理
    // ["/api","/music"]
    var proxyKeys = Object.keys(proxy);
    // 判断 当前url满足哪一个条件
    for(let key of proxyKeys){
      // 判断url是否以当前条件开头
      if(options.url.startsWith(key)){
        // 给他加上配置好的域名
        // 判断一线是否需要重写地址
        // 把前缀key替换掉就行了 ， substring
        options.url = proxy[key].target+options.url;
        // 有一个匹配了，结束代理就可以
        break;
      }
    }


    wx.request({
      url: options.url,
      method:options.method,
      data:options.data,
      header,
      success(res){
        reslove(res)
      },
      fail(err){
        reject(err);
      }
    })
  });
}

// 参数
//   url
//   data
//   optison 
export function post(url,data,options={}){
  return request({
    url,
    method:"POST",
    data,
    ...options
  });
}

// 输入和输出
// axios的get方法，参数有哪些？
// url
// options 
export function get(url,options){
  return request({
    url,
    method:"GET",
    ...options
  });
}